package m.common.action;

import m.common.service.Service;
import m.server.web.Request;
import m.server.web.Response;
import m.system.RuntimeData;

import java.lang.reflect.Type;


public abstract class Action {
	/** 覆盖方法 不受定义事务影响
	 * 此方法可以覆盖，action执行前先执行此方法，用于action执行前的操作
	 * 参数method是action执行的方法
	 */
	public void beforeExecute(RequestParam requestParam) throws Exception{

	}

	/**
	 * 覆盖方法 不受定义事务影响  action报错不执行
	 * 此方法可以覆盖，action执行后执行此方法，用于action执行后的操作
	 * 参数method是action执行的方法,result是action执行后的返回结果
	 */
	public void afterExecute(RequestParam requestParam,Object result) throws Exception{

	}
	/**
	 * 覆盖方法 action报错执行  返回新的结果
	 * 此方法可以覆盖，action执行报错后执行此方法，可改变返回结果
	 * method是action执行的方法  e是action报错后的异常  returnType是action方法返回的类型
	 */
	public Object exceptionExecute(RequestParam requestParam, Exception e, Type returnType) throws Exception {
		throw e;
	}
	/**
	 * 获取service实例
	 */
	public <T extends Service> T getService(Class<? extends T> clazz){
		return RuntimeData.getService(clazz);
	}
	public Service getService(){
		return RuntimeData.getService(Service.class);
	}
	
	
	private Request request;
	private Response response;
	private String authorization;
	public String getAuthorization() {
		return authorization;
	}
	public void setAuthorization(String authorization) {
		this.authorization = authorization;
	}

	public String getIpAddress() { 
		return request.getIpAddress();
	}
	public Request getRequest() {
		return request;
	}
	public void setRequest(Request request) {
		this.request = request;
	}
	public Response getResponse() {
		return response;
	}
	public void setResponse(Response response) {
		this.response = response;
	}
}
